home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_55 / ruckmidi.h < prev    next >
Text File  |  1995-01-01  |  6KB  |  187 lines

  1. /*      ruckmidi.h
  2.  
  3.         Defines the RUCKUS library's structs, constants, and prototype
  4.  
  5.     v1.0d 27-Feb-94
  6.  
  7.     ***********************************************************************
  8.     * NOTE: RUCKUS is for medium, large, or huge models (do not use tiny, *
  9.     * ---- small, or compact since these allow for only 1 code segment).  *
  10.     ***********************************************************************
  11.  
  12.     ALL Borland C compilers must use the MIDMEMBC.OBJ module patch for
  13.     RUCKMIDI.LIB. See the BORLAND.ZIP file for more information.
  14.  
  15.     Struct types must be standard byte packed; do not special align elements
  16.     ** MS-specific #pragma pack(1) and pack() used in this header file **
  17. */
  18.  
  19. #pragma pack(1)
  20.  
  21. int far pascal RUCKMIDI(void far *datapack);
  22.  
  23. #define SysInfoMidi     0
  24. #define InitMidi        1
  25. #define ExitMidi        2
  26. #define AtExitMidi      3
  27. #define LoadMidi        4
  28. #define PlayMidi        5
  29.  
  30. #define EndMidi         8
  31. #define PauseMidi       9
  32. #define DeallocMidi     10
  33. #define FastFwdMidi     11
  34. #define OutMsgMidi      12
  35.  
  36. #define SetAllMidi      20
  37. #define SetVolumeMidi   21
  38. #define SetToneMidi     22
  39. #define SetPatchMidi    23
  40. #define SetChMaskMidi   24
  41.  
  42. #define SetAllFMSBP     30
  43.  
  44. /* current highest function is 30 */
  45.  
  46. struct DeallocMidiPack { /* DMP */
  47.  unsigned Func;
  48.  int Stat;
  49.  unsigned HandSeg;      /* RUCKUS allocates DOS memory */
  50.  unsigned TypeFlag;     /* 0=DOS para */
  51. }; /* 8 */
  52.  
  53. struct FastFwdMidiPack { /* FFMP */
  54.  unsigned Func;
  55.  int Stat;
  56.  long TickCount;
  57. }; /* 8 */
  58.  
  59. struct GetDataMidiPack { /* GDMP */
  60.  unsigned Func;
  61.  int Stat;
  62.  unsigned long BytePos; /* current byte relative base ptr */
  63. }; /* 8 */
  64.  
  65. struct InitMidiPack {   /* IMP */
  66.  unsigned Func;
  67.  int Stat;
  68.  unsigned DeviceID;     /* 0=OPL-2 melodic,1=OPL-2 percussive */
  69.  unsigned IOport;
  70.  unsigned PercCh;       /* percussive channel (0-based) */
  71.  unsigned ChMask;       /* bitmapped */
  72.  unsigned Flags;        /* see Appendix D. */
  73.  void far *InfoPtr;     /* ret:far ptr to RUCKMIDI info */
  74.  void far *MidiExitPtr; /* ret:far ptr to ExitMidi routine */
  75. }; /* 22 */
  76.  
  77. struct LoadMidiPack {   /* LMP */
  78.  unsigned Func;
  79.  int Stat;
  80.  void far *FilenamePtr;/* far ptr to filenameZ to load */
  81.  unsigned long StartPos; /* offset into file to start load at */
  82.  unsigned long LoadSize; /* number of bytes to load (or 0 for autosize) */
  83.  void far *LoadPtr;    /* ret:DOS seg:offset (offset always 0) */
  84. }; /* 20 */
  85.  
  86. struct OutMsgMidiPack { /* OMMP */
  87.  unsigned Func;
  88.  int Stat;
  89.  unsigned Mstatus;      /* status byte (8n, 9n, ... En) */
  90.  unsigned Mdata;
  91. }; /* 8 */
  92.  
  93. struct PlaybackMidiPack { /* PBMP */
  94.  unsigned Func;
  95.  int Stat;
  96.  unsigned Mode;         /* mode (0=interrupt FG,1=BG) */
  97.  void far *LoadPtr;   /* seg:off to start of data to play */
  98. }; /* 10 */
  99.  
  100. struct PauseMidiPack {  /* PMP */
  101.  unsigned Func;
  102.  int Stat;
  103.  unsigned Pause;        /* 0=unpause else pause */
  104. }; /* 6 */
  105.  
  106. struct SetPack {        /* SP */
  107.  unsigned Func;
  108.  int Stat;              /* (if volume=0 SB speaker off'ed else on'ed) */
  109.  unsigned Volume;       /* volume (left ch=MSB,right=LSB) (0-127,0-127) */
  110.  unsigned IntRate;      /* playback interrupt rate (5000-23000) */
  111.  unsigned Priority;     /* priority level (0-2, default=1) */
  112. }; /* 10 */
  113.  
  114. struct SetFMProPack {   /* SFMPP */
  115.  unsigned Func;
  116.  int Stat;
  117.  unsigned IOport;       /* base I/O port (0x220, 0x240) */
  118.  int MasterVol;         /* 0x0F0F=max (low byte=right,hi=left,-1=no change) */
  119.  int Steer;             /* 0=none,1=left,2=right,3=mute,-1=no change */
  120.  unsigned FMvol;        /* as MasterVol but cannot skip (i.e., cannot=-1) */
  121. }; /* 12 */
  122.  
  123. struct SetMidiPack {     /* SMP */
  124.  unsigned Func;
  125.  int Stat;
  126.  unsigned Channel;      /* channel to set (bit mask of channels 0-15) */
  127.  int Volume;            /* volume adjust */
  128.  int Tone;              /* tone adjust */
  129.  unsigned ChMask;       /* if bit=0 then that channel ignored */
  130.  int PatchMapID;        /* patch map ID */
  131.  void far *PatchMapPtr; /* farptr to alt patch map/ret:addr of PatchMapID */
  132. }; /* 18 */
  133.  
  134. struct SysInfoMidiPack { /* SIMP */
  135.  unsigned Func;
  136.  int Stat;
  137.  unsigned Device0;    /* =1 if OPL-2 melodic mode available */
  138.  unsigned D0port;     /* 0x388 */
  139.  unsigned D0mask;     /* available channel mask for SMP.ChMask */
  140.  unsigned Device1;    /* =1 if OPL-2 percussive mode available */
  141.  unsigned D1port;
  142.  unsigned D1mask;
  143. }; /* 16 */
  144.  
  145. struct XitMidiPack {    /* XMP */
  146.  unsigned Func;
  147.  int Stat;
  148. }; /* 4 */
  149.  
  150.  
  151. /* MIDI data area structure  PUBLIC MIDIDATA in RUCKMIDI.LIB */
  152.  
  153. struct MidiDataArea {
  154.  unsigned DeviceID;     /*+0    ;0=AdLib melodic, 1=AdLib percussive... */
  155.  unsigned Flags;        /* 2    ;bit0=1 use background processing */
  156.                         /*      ;bit1=1 disable program change event */
  157.                         /*      ;bit2-7 reserved (low byte used to send */
  158.                         /*      ;while high byte used to return info) */
  159.                         /*      ;bit8-13 reserved */
  160.                         /*      ;bit14=1 then CTMF file playing */
  161.                         /*      ;bit15=1 then AdLib ROL-convert */
  162.  unsigned PercChannel;  /* 4    ;<> 0 percussion channel mapped to here */
  163.  unsigned End;          /* 6    ;=1 end of MIDI (not playing) */
  164.  unsigned MemDOS;       /* 8    ;DOS RAM available */
  165.  unsigned MemUsed;      /* 10   ;K used by last load */
  166.  unsigned TypeMIDI;     /* 12   ;MIDI type (0 or 1) */
  167.  unsigned NoTracks;     /* 14   ;number of tracks */
  168.  unsigned TicksQnote;   /* 16   ;ticks/quarter-note */
  169.  
  170.  unsigned long uSecsQnote;/* 18   ;micro-secs/quarter-note */
  171.  unsigned long TickCount; /* 22   ;current tick count */
  172.  
  173.  void far *MusicPtr;  /* 26   ;farptr to current MIDI data byte */
  174.  unsigned CurrTrk;      /* 30   ;current MIDI track */
  175.  char TimeSig[4];       /* 32   ;nm,dn,MIDI clocks/beat,32nd notes/beat */
  176.  char ChPrograms[16];   /* 36   ;channel programs */
  177.  char ChVolumes[16];    /* 52   ;channel volume level (0-127) */
  178.  char ChNotes[16];      /* 68   ;channel note values (0-127) */
  179.  
  180.  unsigned ChRelVolumes[16];/* 84   ;-128 to +127 range (0=no change) */
  181.  unsigned ChRelNotes[16];  /* 116  ;-128 to +127 range (0=no change) */
  182. };
  183.  
  184. #pragma pack()
  185.  
  186. /* end of ruckdac.h */
  187.